class Encoder

  CHARACTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split('')

  def base64_encode(bytes=[])
    return [] if bytes.length == 0
    chars = []; i = 0
    until bytes[i].nil? do
      byte1, byte2, byte3 = bytes[i], bytes[i + 1], bytes[i + 2]
      chars << CHARACTERS[byte1 >> 2]
      if byte2.nil?
        byte2 = 0x0
        byte2_nil = true
      end
      if byte3.nil?
        byte3 = 0x0
        byte3_nil = true
      end
      chars << CHARACTERS[byte1 << 4 & 0x3F | byte2 >> 4]
      if byte2_nil
        chars << '='
        chars << '='
        break
      else
        chars << CHARACTERS[byte2 << 2 & 0x3F | byte3 >> 6]
      end
      if byte3_nil
        chars << '='
        break
      else
        chars << CHARACTERS[byte3 & 0x3F]
      end
      i = i + 3
    end
    chars.to_s
  end

  def decode_base64(str)
    
  end

end

arr = 'easure.'.unpack('U*')
print arr.join(','), "\n"
print Encoder.new.base64_encode(arr)
